import { IPSDEField } from '../defield/ipsdefield';
import { IPSDERBase } from './ipsderbase';
import { IPSDEDataSet } from '../ds/ipsdedata-set';
import { IPSLanguageRes } from '../../res/ipslanguage-res';

/**
 *
 * 继承父接口类型值[DERCUSTOM]
 * @export
 * @interface IPSDERCustom
 */
export interface IPSDERCustom extends IPSDERBase {
  /**
   * 自定义导出次序
   * @type {number}
   * @default -1
   */
  customExportOrder: number;

  /**
   * 自定义导出次序2
   * @type {number}
   * @default -1
   */
  customExportOrder2: number;

  /**
   * 关系子类型
   * @type {string}
   */
  dERSubType: string;

  /**
   * 主从关系类型
   * @description 值模式 [实体1：N关系主从关系类型] {1：附属关系、 2：附属关系(N:N连接)、 4：数据访问控制、 8：嵌套操作、 16：递归关系 }
   * @type {( number | 1 | 2 | 4 | 8 | 16)}
   */
  masterRS: number | 1 | 2 | 4 | 8 | 16;

  /**
   * 嵌套成员数据集对象
   *
   * @type {IPSDEDataSet}
   */
  getNestedPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 嵌套成员数据集对象
   *
   * @type {IPSDEDataSet}
   */
  get nestedPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 嵌套成员数据集对象（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getNestedPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 一对多关系数据属性
   *
   * @type {IPSDEField}
   */
  getOne2XDataPSDEField(): IPSDEField | null;

  /**
   * 一对多关系数据属性
   *
   * @type {IPSDEField}
   */
  get one2XDataPSDEField(): IPSDEField | null;

  /**
   * 一对多关系数据属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getOne2XDataPSDEFieldMust(): IPSDEField;

  /**
   * 关系属性名称
   * @type {string}
   */
  pickupDEFName: string;

  /**
   * 关系属性
   *
   * @type {IPSDEField}
   */
  getPickupPSDEField(): IPSDEField | null;

  /**
   * 关系属性
   *
   * @type {IPSDEField}
   */
  get pickupPSDEField(): IPSDEField | null;

  /**
   * 关系属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getPickupPSDEFieldMust(): IPSDEField;

  /**
   * 关系主信息属性
   *
   * @type {IPSDEField}
   */
  getPickupTextPSDEField(): IPSDEField | null;

  /**
   * 关系主信息属性
   *
   * @type {IPSDEField}
   */
  get pickupTextPSDEField(): IPSDEField | null;

  /**
   * 关系主信息属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getPickupTextPSDEFieldMust(): IPSDEField;

  /**
   * 删除拒绝消息语言标记
   * @type {string}
   */
  rRMLanResTag: string;

  /**
   * 删除拒绝消息语言资源
   *
   * @type {IPSLanguageRes}
   */
  getRRMPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 删除拒绝消息语言资源
   *
   * @type {IPSLanguageRes}
   */
  get rRMPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 删除拒绝消息语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getRRMPSLanguageResMust(): IPSLanguageRes;

  /**
   * 删除方式
   * @description 值模式 [实体1：N关系主实体删除关系实体操作] {0：无操作、 1：同时删除、 2：置空、 3：限制删除 }
   * @type {( number | 0 | 1 | 2 | 3)}
   */
  removeActionType: number | 0 | 1 | 2 | 3;

  /**
   * 删除次序
   * @type {number}
   */
  removeOrder: number;

  /**
   * 删除拒绝消息
   * @type {string}
   */
  removeRejectMsg: string;

  /**
   * 关系识别值
   * @type {string}
   */
  typeValue: string;
}
